package com.xyoto.community.mapper.main;

import com.xyoto.community.entity.main.FanFollow;
import com.xyoto.community.po.UserFollowStatusPO;
import io.swagger.annotations.ApiModel;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @author coderFu
 * @create 2021/10/3
 */
@ApiModel("用户关注|粉丝持久层")
public interface FanFollowMapper {

    /**
     * 根据用户id和关注用户id查询关注状态
     *
     * @param userId  关注用户id
     * @param userIds 被关注用户id
     * @return
     */
    List<UserFollowStatusPO> getUserFollowStatusList(Integer userId, List<Integer> userIds);


    /**
     * 通话用户id和目标用户id获取关注状态
     *
     * @param userId
     * @param targetId
     * @return
     */
    FanFollow getUserFollowStatus(Integer userId, int targetId);

    /**
     * 新增关注用户
     *
     * @param fanFollow
     * @return
     */
    Integer saveFollow(FanFollow fanFollow);

    /**
     * 取消关注用户
     *
     * @param fanFollow
     * @return
     */
    Integer removeFollow(FanFollow fanFollow);

    /**
     * 查询我关注的用户是否也关注了我（互关）
     *
     * @param followId 我关注的用户id
     * @return 关注状态
     */
    Short getIsCorrelateById(@Param("followId") Integer followId, @Param("userId") Integer userId);


    /**
     * 再次关注时操作只操作一个数据
     *
     * @param fanFollow
     * @return
     */
    Integer updateFollow(FanFollow fanFollow);

    /**
     * 统计关注指定用户id的人数
     *
     * @param userId
     * @param followStatus
     * @return
     */
    Integer countFollowMeByUserIdAndStatus(@Param("userId") Integer userId, @Param("followStatus") short followStatus);

    /**
     * 统计指定用户关注其他人的总数
     * @param userId
     * @param followStatus
     * @return
     */
    Integer countMyFollowByUserIdAndStatus(@Param("userId") Integer userId, @Param("followStatus") short followStatus);
}
